Recording with a Waveform-Audio Device

The following example opens a waveform-audio device with a new file, records for the specified time, plays the recording, and prompts the user to save the recording if desired.

// Uses the MCI_OPEN, MCI_RECORD, and MCI_SAVE commands to record and

// save a waveform-audio file. Returns 0L if successful; otherwise,

// it returns an MCI error code.

DWORD recordWAVEFile(DWORD dwMilliSeconds)

    UINT wDeviceID;

    DWORD dwReturn;

    MCI_OPEN_PARMS mciOpenParms;

    MCI_RECORD_PARMS mciRecordParms;

    MCI_SAVE_PARMS mciSaveParms;

    MCI_PLAY_PARMS mciPlayParms;

 

    // Open a waveform-audio device with a new file for recording.

    mciOpenParms.lpstrDeviceType = "waveaudio";

    mciOpenParms.lpstrElementName = "";

    if (dwReturn = mciSendCommand(0, MCI_OPEN,

        MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,
        (DWORD)(LPVOID) &mciOpenParms))
   

        // Failed to open device; don't close it, just return error.

        return (dwReturn);

    }

 

    // The device opened successfully; get the device ID.

    wDeviceID = mciOpenParms.wDeviceID;

 

    // Begin recording and record for the specified number of

    // milliseconds. Wait for recording to complete before continuing.

    // Assume the default time format for the waveform-audio device

    // (milliseconds).

    mciRecordParms.dwTo = dwMilliSeconds;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,

        MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))

    

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (dwReturn);

    }

 

    // Play the recording and query user to save the file.

    mciPlayParms.dwFrom = 0L;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,

        MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))

   

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (dwReturn);

    }

    if (MessageBox(hMainWnd, "Do you want to save this recording?",

        "", MB_YESNO) == IDNO)

   

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (0L);

    }

 

    // Save the recording to a file named TEMPFILE.WAV. Wait for

    // the operation to complete before continuing.

    mciSaveParms.lpfilename = "tempfile.wav";

    if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,

        MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms))

   

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (dwReturn);

    }

 

    return (0L);

}